Software that runs on a computing device can use libraries provided by the operating system of that computing device that are shared among software that is executed on that operating system. For example, these shared libraries can be used to access operating system functions (e.g., reading files, writing files, file management, network communications, inter-process communications, memory management, string manipulations, user interface manipulations, mathematics functions, accessing other resources, doing graphical representation on a visual device, etc.). In addition, these shared libraries can change when the operating system changes or is updated. For example, upgrading to a newer version of an operating system can change the functions present in the shared library, change versions and arguments used in these functions, and/or change functionality of some, none or all of the library functions. As a result, software developed for one operating system may not work on another operating system. In the example above, upgrading to the new operating system may cause the software not to work on the new operating system whether the operating system is a different type of operating system or the new operating system is simply an update to an existing operating system. To determine if software is executable on a new operating system, the software is typically re-compiled and run on the new operating system.
When a new version of the operating is released, there can be a problem of whether a customer's software can run on that new version of operating software. If the shared libraries have been updated, they may be incompatible with the customer's software. Alternatively, software developer's may not know if shared libraries are important to software that runs on an operating system. Consequently, by updating a shared library, the developer risks breaking existing software.